The present invention relates generally to error correction for digital data. More particularly, the present invention relates to the use of error detection codes to correct errors in digital data.
FIG. 1 shows a conventional write channel 100 for writing data to a hard disk 102. Write channel 100 comprises a cyclic redundancy check (CRC) encoder 104, a Reed-Solomon (RS) encoder 106, and a channel encoder 108.
FIG. 2 shows a conventional write process 200 for write channel 100 of FIG. 1. CRC encoder 104 encodes user data u (step 202) using a CRC code to create CRC codeword bc, which comprises user data u and CRC bits c. RS encoder 106 encodes CRC codeword bc (step 204) using a RS code to create RS codeword brs, which comprises user data u, CRC bits c, and RS bits r. Channel encoder 108 encodes RS codeword brs (step 206) using a channel code such as a run-length limited (RLL) code to create channel codeword MI, which is written to disk 102 (step 208).
FIG. 3 shows a conventional permuted write channel 300 for writing data to a hard disk 302. Write channel 300 comprises a CRC encoder 304, a RS encoder 306, channel encoders 308 and 310, and a multiplexer 312.
FIG. 4 shows a conventional write process 400 for permuted write channel 300 of FIG. 3. Channel encoder 308 encodes user data u (step 402) using a channel code such as a RLL code to create channel codeword br1. CRC encoder 304 encodes channel codeword br1 (step 404) using a CRC code to create CRC codeword bc, which comprises channel codeword br1 and CRC bits c. RS encoder 306 encodes CRC codeword bc (step 406) using a RS code to create RS bits r.
Both RS encoder 306 and CRC encoder 304 are systematic encoders. Therefore, the RLL constraints in br1 are preserved after the CRC and RS encoding. The CRC bits c and RS bits r are then encoded by channel encoder 310 (step 408) to ensure good RLL properties in those bits, thereby generating channel codeword br2. Multiplexer 312 codewords br1 and br2 as channel codeword bd before writing the channel codeword bd to disk 302 (step 410).
The purpose of the CRC code in conventional systems is to detect any remaining error after the RS decoding when reading the data back from the disk. The CRC encoder calculates the CRC bits c based on the user data u and a pre-selected generating polynomial. In the read channel, if the CRC bits c agree with the data bits after RS decoding, the RS decoding result is considered correct. Otherwise, a RS decoding error flag is raised.
FIG. 5 shows a conventional read channel 500 that can be used to read data from a hard disk 502 that was written by a conventional write channel such as write channel 100 of FIG. 1. Read channel 500 comprises a channel detector 504, a channel decoder 506, a RS decoder 508, and a CRC decoder 510.
FIG. 6 shows a conventional read process 600 for read channel 500 of FIG. 5. Channel detector 504 receives a signal from disk 502. For example, the signal can be produced by a head moving over data recorded on hard disk 502. Channel detector 504 produces a detected sequence of digital data (step 602), sometimes referred to as “hard decisions,” based on the signal received from hard disk 502, according to conventional techniques such as Viterbi detection.
Channel decoder 506 decodes the detected sequence (step 604) according to a channel code, which often includes a run-length limited (RLL) code and a parity code. RS decoder 508 decodes the output of channel decoder 506 (step 606). CRC decoder 510 decodes the output of RS decoder 508 (step 608).
FIG. 7 shows a conventional permuted read channel 700 that can be used to read data from a hard disk 502 that was written by a conventional permuted write channel such as write channel 300 of FIG. 3. Read channel 700 comprises a channel detector 504, channel decoders 506 and 706, a RS decoder 508, and a CRC decoder 510.
FIG. 8 shows a conventional read process 800 for read channel 500 of FIG. 5. Channel detector 504 receives a signal from disk 502. For example, the signal can be produced by a head moving over data recorded on hard disk 502. Channel detector 504 produces a detected sequence of digital data (step 802), sometimes referred to as “hard decisions,” based on the signal received from hard disk 502, according to conventional techniques such as Viterbi detection.
Channel decoder 506 decodes the detected sequence (step 804) according to a channel code, which often includes a run-length limited (RLL) code and a parity code. RS decoder 508 decodes the output of channel decoder 506 (step 806). CRC decoder 510 decodes the output of RS decoder 508 (step 808). Channel decoder 506 decodes the output of CRC decoder 510 according to the channel code (step 810).
In a conventional permuted read channel 700 (FIG. 7), channel decoder 706 decodes the channel detector output according to the channel code, such as parity code, and it also decodes CRC/RS bits according to RLL codes, i.e., restore c and r from br2 (FIG. 3); channel decoder 506 decodes RLL codes only.